package com.wuchao.utils;

import com.wuchao.entity.Menu;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*@paramid为父级id rootmenu为所有菜单的内容
*@return
*/
public class MenuTreeBuilder {
    public static List<Menu> build(List<Menu> rootMenu){//因为没有容器，做入参也好调用
        //2查看下
        rootMenu.forEach(menu -> System.out.println(menu.toString()));
        //3定义最后一个结果来存储菜单树
        List<Menu> menuList=new ArrayList<>();
        //4查询一级菜单
        for(Menu menu : rootMenu){
            if (menu.getParentId()==0){//用equals拿不到
                menuList.add(menu);
            }
        }//排序父级菜单
        Collections.sort(menuList,Menu.order());
        //5查找子菜单
        for(Menu menu : menuList){
            //递归方法设置子菜单，可能子菜单还有子菜单
            menu.setChildMenus(getChild(menu.getId(), rootMenu));
            //设置子菜单方法自带，但是get子菜单需要自己写
        }
        return menuList;
    }
    //子菜单方法
    private static List<Menu> getChild(Long id, List<Menu> rootMenu) {
        //父亲菜单id为1，且不能为按钮类型1，且不禁用。这里是写着给父菜单设置子菜单用的额
        List<Menu> childList = new ArrayList<>();
        for(Menu menu:rootMenu){
            if(menu.getParentId().equals(id)&&
                    menu.getType().equals("0")){
                childList.add(menu);
            }
        } //设置二级甚至更高级的子菜单
        for(Menu menu: childList){//坨子代表递归
            menu.setChildMenus(getChild(menu.getId(),rootMenu));
        }//排序子菜单
        Collections.sort(childList,Menu.order());
        if(childList.size()==0){//子菜单没有内容了，就是结束递归
            return null;
        }

        return childList;
    }
}
